package com.my.study.cas;

import java.util.concurrent.atomic.AtomicInteger;

/**
 * CAS(compareAndSet)比较并交换:比较从堆内存(主内存)中获取到的值与当前线程工作内存的值相同则进行更新,否则重新赋值
 *
 * 应用于atomic包装类中
 * 缺点:1、循环时间长、cpu开销大
 *      2、只能保证一个变量的原子性
 *      3、导致ABA问题
 *
 */
public class CASDemo {

    /**
     * 基本数据类型的包装类
     *
     * @param args
     */
    public static void main(String[] args) {
        AtomicInteger integer = new AtomicInteger(5);
        // 比较期望值与获取值相同:true	 2024
        System.out.println(integer.compareAndSet(5,2024)+"\t "+integer.get());
        // 期望值与获取值不同:false	 2024,未重新赋值
        System.out.println(integer.compareAndSet(5,2025)+"\t "+integer.get());
    }
}
